// trait 的anotation在impl中也要指定

// A struct with annotation of lifetimes.
#[derive(Debug)]
struct Borrowed<'a> {
    x: &'a i32,
}

// Annotate lifetimes to impl.
// 生命周期 <'a> 在impl的后面，结构体也要带着生命周期
impl<'a> Default for Borrowed<'a> {
    fn default() -> Self {
        Self {
            x: &10,
        }
    }
}

fn main() {
    // 注意Default是一个接口，在转了类型以后，就会被转成Borrowed::default()的调用
    let b: Borrowed = Default::default();
    println!("b is {:?}", b);
}